/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.segu.mbean;

import com.brain.core.common.UtilCore;
import com.brain.core.dto.EmpresaDto;
import com.brain.core.dto.EmpresaOpcionSistemaDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.manager.EmpresaManager;
import com.brain.core.manager.EmpresaOpcionSistemaManager;
import com.brain.core.manager.RecursosManager;
import com.brain.core.view.mbean.ApplicationMBean;
import com.brain.core.view.mbean.GenericMBean;
import com.brain.core.view.mbean.SessionMBean;
import com.brain.segu.dto.OpcionSistemaDto;
import com.brain.segu.manager.OpcionSistemaManager;

import java.io.Serializable;
import java.util.List;
import javax.annotation.Resource;
import org.apache.log4j.Logger;
import org.primefaces.model.TreeNode;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author Indra
 */
@Controller("opcionSistemaMBean")
@Scope("session")
public class OpcionSistemaMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(OpcionSistemaMBean.class);
    @Resource
    private OpcionSistemaManager manager;
    @Resource
    private EmpresaManager empresaManager;
    @Resource
    private BitacoraManager bitacoraManager;
    @Resource
    private EmpresaOpcionSistemaManager empresaOpcionSistemaManager;   
    @Resource
    private RecursosManager recursosManager;
    private List<OpcionSistemaDto> lista;
    private OpcionSistemaDto dto;
    private List<EmpresaOpcionSistemaDto> listaEmpresaOpcionSistema;
    private String keyEntidad = "key.entidad.opciones.sistema";
    private TreeNode opcionesSistemas;
    private TreeNode selectedOpcionesSistema;
    private OpcionSistemaDto OpcionesSistemaPrincipal;
    private OpcionSistemaDto OpcionesSistemaSeleccionadoDto;
    private EmpresaOpcionSistemaDto empresaOpcionSistemaDto;
    private EmpresaDto empresaId;
    private Long verificarCargaOpcionesSistema;
    private Boolean validarBotonGuardar = Boolean.FALSE;
    
    @Autowired
    private ApplicationMBean applicationMBean;
    
    @Autowired
    private SessionMBean sessionMBean;
    
    private List<EmpresaDto> listaEmpresa;

    public OpcionSistemaMBean() {
    }

    public String iniciar () {
        try {
             this.lista = null;     
             this.dto = null;
             this.opcionesSistemas = this.cargarOpcionesSistema(this.manager.obtenerPorId(this.manager.getIdOpcionSistemaPrincipal()));
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }

        return manager.getUrlLista();
    }
    
    public String iniciarOpcionSistemaDesdeEmpresa(EmpresaDto empresaDto) {
        try {
            this.lista = null;
            this.dto = null;
            this.listaEmpresaOpcionSistema = this.empresaOpcionSistemaManager.obtenerTodosPorEmpresa(empresaDto);
            this.opcionesSistemas = this.manager.cargarProcesoInicialDesdeEmpresa(this.listaEmpresaOpcionSistema);
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }

        return manager.getUrlLista();
    }
    
    public void filtroEmpresa(Long ubigeoInicalId) {
        try {
                this.OpcionesSistemaPrincipal = this.manager.obtenerPorId(ubigeoInicalId);
                this.opcionesSistemas = cargarOpcionesSistema(this.OpcionesSistemaPrincipal);
             
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }
    }
    
    public void filtroEmpresa(){     
        try {
             this.OpcionesSistemaPrincipal = this.manager.OpcionSistemaPrincipalPorEmpresa(this.empresaId).get(0);
             this.opcionesSistemas = cargarOpcionesSistema(this.OpcionesSistemaPrincipal);    
        } catch (DAOException ex) {
            showError("ERROR_SISTEMA", ex.getMessage());
        }      
    }
    public String cargaOpcionsistemaDesdeEmpresa (EmpresaDto empresaDto) {

        return manager.getUrlLista();
        
    }

    private TreeNode cargarOpcionesSistema(OpcionSistemaDto ubigeoPrincipal) {
        return this.manager.opcionesSistemaCarga(ubigeoPrincipal); 
    }

    public void editarOpcionSistema() {
        this.dto = new OpcionSistemaDto();
        this.OpcionesSistemaSeleccionadoDto = (OpcionSistemaDto) selectedOpcionesSistema.getData();
        this.dto = this.OpcionesSistemaSeleccionadoDto;
        this.validarBotonGuardar=Boolean.FALSE;
        sessionMBean.setAccion(applicationMBean.getEditar());
    }

    public void nuevaOpcionSistema() {
        this.OpcionesSistemaSeleccionadoDto = (OpcionSistemaDto) selectedOpcionesSistema.getData();
        this.validarBotonGuardar=this.manager.validarCreacionTipo(this.OpcionesSistemaSeleccionadoDto.getTipoMenu());
        
        this.dto = new OpcionSistemaDto();
        this.dto.setActivo(Boolean.TRUE);
        this.dto.setUsuario(sessionMBean.getSessionUsuarioDto().getId());
        this.dto.setFecha(UtilCore.Fecha.obtenerFechaActualDate());
        this.dto.setPadreDto(this.OpcionesSistemaSeleccionadoDto);
        //this.dto.setEmpresa(this.empresaId.getId());
        this.dto.setTipoMenu(this.manager.evaluarTipo(this.OpcionesSistemaSeleccionadoDto));  

        sessionMBean.setAccion(applicationMBean.getNuevo());
    }

    public void guardar() {
        //this.dto.setEmpresa(this.empresaId.getId());
        manager.guardar(this.dto);
        this.iniciar();
    }
    
    public String verBitacora() {
        OpcionSistemaDto ubgDtoAux= new OpcionSistemaDto();
        ubgDtoAux = (OpcionSistemaDto) selectedOpcionesSistema.getData();
        bitacoraManager.cargarBitacoraEntidad(manager.getIdEntidad(), ubgDtoAux.getId());
        return null;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        OpcionSistemaMBean.logger = logger;
    }

    public OpcionSistemaManager getManager() {
        return manager;
    }

    public void setManager(OpcionSistemaManager manager) {
        this.manager = manager;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public List<OpcionSistemaDto> getLista() {
        return lista;
    }

    public void setLista(List<OpcionSistemaDto> lista) {
        this.lista = lista;
    }

    public OpcionSistemaDto getDto() {
        return dto;
    }

    public void setDto(OpcionSistemaDto dto) {
        this.dto = dto;
    }

    public String getKeyEntidad() {
        return keyEntidad;
    }

    public void setKeyEntidad(String keyEntidad) {
        this.keyEntidad = keyEntidad;
    }

    public TreeNode getOpcionesSistemas() {
        return opcionesSistemas;
    }

    public void setOpcionesSistemas(TreeNode opcionesSistemas) {
        this.opcionesSistemas = opcionesSistemas;
    }

    public TreeNode getSelectedOpcionesSistema() {
        return selectedOpcionesSistema;
    }

    public void setSelectedOpcionesSistema(TreeNode selectedOpcionesSistema) {
        this.selectedOpcionesSistema = selectedOpcionesSistema;
    }

    public OpcionSistemaDto getOpcionesSistemaPrincipal() {
        return OpcionesSistemaPrincipal;
    }

    public void setOpcionesSistemaPrincipal(OpcionSistemaDto OpcionesSistemaPrincipal) {
        this.OpcionesSistemaPrincipal = OpcionesSistemaPrincipal;
    }

    public OpcionSistemaDto getOpcionesSistemaSeleccionadoDto() {
        return OpcionesSistemaSeleccionadoDto;
    }

    public void setOpcionesSistemaSeleccionadoDto(OpcionSistemaDto OpcionesSistemaSeleccionadoDto) {
        this.OpcionesSistemaSeleccionadoDto = OpcionesSistemaSeleccionadoDto;
    }

    public EmpresaDto getEmpresaId() {
        return empresaId;
    }

    public void setEmpresaId(EmpresaDto empresaId) {
        this.empresaId = empresaId;
    }

    public Long getVerificarCargaOpcionesSistema() {
        return verificarCargaOpcionesSistema;
    }

    public void setVerificarCargaOpcionesSistema(Long verificarCargaOpcionesSistema) {
        this.verificarCargaOpcionesSistema = verificarCargaOpcionesSistema;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }
    

    public List<EmpresaDto> getListaEmpresa() {
        return this.recursosManager.obtenerEmpresasActivasCombo();
    }

    public void setListaEmpresa(List<EmpresaDto> listaEmpresa) {
        this.listaEmpresa = listaEmpresa;
    }

    public Boolean getValidarBotonGuardar() {
        return validarBotonGuardar;
    }

    public void setValidarBotonGuardar(Boolean validarBotonGuardar) {
        this.validarBotonGuardar = validarBotonGuardar;
    }

 
    public EmpresaOpcionSistemaDto getEmpresaOpcionSistemaDto() {
        return empresaOpcionSistemaDto;
    }

    public void setEmpresaOpcionSistemaDto(EmpresaOpcionSistemaDto empresaOpcionSistemaDto) {
        this.empresaOpcionSistemaDto = empresaOpcionSistemaDto;
    }

    public List<EmpresaOpcionSistemaDto> getListaEmpresaOpcionSistema() {
        return listaEmpresaOpcionSistema;
    }

    public void setListaEmpresaOpcionSistema(List<EmpresaOpcionSistemaDto> listaEmpresaOpcionSistema) {
        this.listaEmpresaOpcionSistema = listaEmpresaOpcionSistema;
    }

}
